package com.leetao.ifkiller.core;

import com.leetao.ifkiller.domain.ConsumerPro;
import com.leetao.ifkiller.domain.PredicatePro;

import java.util.function.Consumer;
import java.util.function.Predicate;

/**
 * 命令发布器
 *
 * @author 菅江晖
 * @date 2021/6/11 - 0:01
 */
public interface CommandIssuer<T> {


    /**
     * 发布执行命令
     * 只负责发布执行命令，不负责执行命令
     *
     * @param description 描述
     * @param consumer    消费者
     * @return 任务发布器
     */
    CommandIssuer<T> execute(String description, Consumer<T> consumer);


    /**
     * 追加条件
     *
     * @param description 描述
     * @param condition   条件
     * @return 任务发布器
     */
    CommandIssuer<T> and(String description, Predicate<T> condition);

    /**
     * 条件
     *
     * @param description 描述
     * @param condition   条件
     * @return 任务发布器
     */
    CommandIssuer<T> condition(String description, Predicate<T> condition);


    /**
     * 获取客户
     *
     * @return 客户
     */
    T clientele();


}
